package controlador;

import java.awt.Button;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;


import modelo.entidad.Anuncio;

import modelo.entidad.Estado;
import modelo.entidad.Foto;
import modelo.entidad.Inmueble;
import modelo.entidad.Municipio;
import modelo.entidad.Pago;
import modelo.entidad.Sugerencia;
import modelo.entidad.Usuario;
import modelo.entidad.Zona;

import modelo.hibernate.dao.DaoAnuncio;
import modelo.hibernate.dao.DaoInmueble;
import modelo.hibernate.dao.DaoUbicacion;
import modelo.hibernate.dao.DaoUsuario;

import org.zkoss.bind.annotation.BindingParam;
import org.zkoss.bind.annotation.Command;
import org.zkoss.bind.annotation.NotifyChange;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Session;
import org.zkoss.zk.ui.Sessions;
import org.zkoss.zk.ui.select.SelectorComposer;
import org.zkoss.zk.ui.select.annotation.Listen;
import org.zkoss.zk.ui.select.annotation.Wire;
import org.zkoss.zk.ui.util.Clients;
import org.zkoss.zul.*;


public class ControladorAnuncio extends SelectorComposer<Component>{
   
	private static final long serialVersionUID = 1L;
	
	@Wire
	private Textbox txtcodigo;
	@Wire
	private Datebox txtfechapublicacion;
	@Wire
	private Intbox txtnrodias;
	@Wire
	private Doublebox txtprecio;
	@Wire
	private Textbox txtcodigoinmueble;
	@Wire
	private Doublebox txtPrecioVent;
	@Wire
	private Doublebox txtTamano;
	@Wire
	private Intbox txtNroHab;
	@Wire
	private Intbox txtNroEst;
	@Wire
	private Textbox txtFoto;
	@Wire
	private Textbox txtDireccion;
	@Wire
	private Textbox txtcodpago;
	@Wire
	private Textbox txtdescripcion;
	@Wire
	private Datebox txtfechapago;
	@Wire
	private Doublebox txtmonto;
	@Wire
	private Combobox cmbTipoOpe;
	@Wire
	private Combobox cmbTipoInm;
	@Wire
	private Combobox cmbEstado;
	@Wire
	private Combobox cmbMunicipio;
	@Wire
	private Combobox cmbZona;
	@Wire
	private Button btnGuardar;
	@Wire
	private Button btnAgregar;
	@Wire
	private Listbox listboxFotos;
	@Wire
	private Image imgImagenPrevia;
	
   private Estado estado;
	
   private DaoUsuario daoUsuario = new DaoUsuario();
   private DaoAnuncio daoAnuncio = new DaoAnuncio();
   
   private DaoUbicacion daoubic = new DaoUbicacion();
   
  
   private List<Foto> fotos = new ArrayList<Foto>();
   
   List<Estado> todosEstados;
   List<Zona> zonas;
   List<Municipio> municipios;

   
   
   private static List<String> tiposOperacion = new ArrayList<String>();
   static{
      tiposOperacion.add("Alquiler");
      tiposOperacion.add("Venta");
   }
   
   private static List<String> tiposInmueble = new ArrayList<String>();
   static{
      tiposInmueble.add("Casa");
      tiposInmueble.add("Apartamento");
   }
   
   public List<String> getTipoOp()
   {
	   return tiposOperacion;
   }
   
   public List<String> getTipoInm()
   {
	   return tiposInmueble;
   }
   
   public List<Estado> getEstados() throws Exception{
		  return todosEstados=daoubic.obtenerTodosEstados();
	}
   
   public Estado getEstado() {
       return estado;
   }
   
   /*
   @DependsOn({"estado"})
   public String getShirtImage() {
       if(shirtSize==null || shirtColor==null){
           return String.format(shirtLocation, "unknow", "unknow");
       }
       return String.format(shirtLocation, shirtColor, shirtSize);
   }
   */
 
   @Listen( "onChange=#cmbEstado")
   public void selectedEstado() throws Exception
   {
	  System.out.println("hello");
   	  Estado s = cmbEstado.getSelectedItem().getValue();
       	cmbMunicipio.setValue(null);
       	 municipios = daoubic.BuscarMunicipios(s);
       	 cmbMunicipio.setModel(new ListModelList<Municipio>(municipios));
   }
   

   @Listen( "onChange=#cmbMunicipio")
   public void selectedMunicipio() throws Exception
   {
	     System.out.println("hello");
   	     Municipio s = cmbMunicipio.getSelectedItem().getValue();
       	 cmbZona.setValue(null);
       	 zonas = daoubic.BuscarZonas(s);
       	 cmbZona.setModel(new ListModelList<Zona>(zonas));
   }
   
   
   @Listen("onClick=#btnGuardar")  
	public void GuardarPublicacion(){
	   System.out.println("yeah");
	  
	  Session sess = Sessions.getCurrent();
      Usuario usuario=(Usuario)sess.getAttribute("usuario");
      Zona zona= cmbZona.getSelectedItem().getValue();
      System.out.println(zona.getNombre());
      
	  // Inmueble inmueble= new Inmueble("santa elena", 989, 3, 3, "Alquiler", "Inmueble", 230);
      // Anuncio anuncio = new Anuncio(23, new Date(), 2,"C");
      // Pago pago = new Pago("transferencia", 200, new Date());
      
      Inmueble inmueble= new Inmueble(txtDireccion.getValue(), txtPrecioVent.getValue(), txtNroHab.getValue(), txtNroEst.getValue(), cmbTipoOpe.getValue(), cmbTipoInm.getValue(),txtTamano.getValue());
	   Anuncio anuncio = new Anuncio(txtprecio.getValue(), txtfechapublicacion.getValue(), txtnrodias.getValue(),"R");
	   Pago pago= new Pago(txtdescripcion.getValue(), txtmonto.getValue(), txtfechapago.getValue());
       inmueble.setAnuncio(anuncio);
       inmueble.setZona(zona);
       
       System.out.println("0");
       List<Foto> fots= new ArrayList<Foto>();
       
		for (Foto f : fotos){
			Foto foto = new Foto(f.getDescripcion(),inmueble);
			fots.add(foto);
		}	
		System.out.println(fots.size());
		inmueble.setFotos(fots);
	    
		System.out.println("1");
		
		
		anuncio.setInmueble(inmueble);
		anuncio.setPago(pago);
		//anuncio.setUsuario(usuario);
		 
		List<Anuncio> pubs= usuario.getPublicaciones();
	    pubs.add(anuncio);
	    usuario.setPublicaciones(pubs);
	    System.out.println("2");
	    
		try {
			daoUsuario.modificarUsuario(usuario);
			System.out.println("3");
			//daoubic.actualizarZona(zona);
			Limpiar();
			Clients.showNotification("Publicacion Guardada Satisfactoriamente","info",null,null,1000);		
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		/*
		List<Inmueble> inms= zona.getInmuebles();
		inms.add(inmueble);
		zona.setInmuebles(inms);
		
		try {
			daoubic.actualizarZona(zona);
			System.out.println("4");
			Clients.showNotification("Inmueble Guardada Satisfactoriamente","info",null,null,1000);		
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		*/
	} 
   
	@Listen("onClick = #btnAgregar")
	public void Agregar(){
	  Foto foto= new Foto(fotos.size()+1,txtFoto.getValue());
	  fotos.add(foto);
      listboxFotos.setModel(new ListModelList<Foto>(fotos)); 
      imgImagenPrevia.setSrc(foto.getDescripcion());
   }  

	@Listen("onSelect = #listboxFotos")
	public void showDetail(){
		Foto selected = listboxFotos.getSelectedItem().getValue();
		System.out.println(selected.getDescripcion());
		imgImagenPrevia.setSrc(selected.getDescripcion());
	}
	
	
	@Listen("onChange=#txtnrodias")
	public void cambiarPrecio() throws Exception
	   {
		  Double precio= txtnrodias.getValue()*daoAnuncio.obtenerCostoActual().getPreciodiario();
		  txtprecio.setValue(precio);
	   }
	
	@Listen("onChange=#txtnrodias")
	public void cambiarMonto() throws Exception
	   {
		  Double precio= txtnrodias.getValue()*daoAnuncio.obtenerCostoActual().getPreciodiario();
		  txtmonto.setValue(precio);
	   }
	

	/*
	 @Command
	 @NotifyChange({"modeloProducto", "footer"})
	    public void removerProd(@BindingParam("producto") Inmueble myProd) {
	    	int id=myProd.getId();
	 		int i=prod.Buscar(id); 
	 		
			Producto producto = new Producto(id, prod.getProducto(i).getDescripcion(),prod.getProducto(i).getCantidadDisp(), prod.getProducto(i).getPrecio(), "E", prod.getProducto(i).getDefensaLab2());
			prod.setProducto(i,producto);
			currentProd = prod.ProductosActivos();
	    }    
	*/
	
	private void Limpiar() throws Exception
	{
		txtcodigo.setText("");
        txtfechapublicacion.setValue(new Date());
	    txtnrodias.setValue(1);
	    cambiarPrecio();
		txtcodigoinmueble.setText("");
		txtPrecioVent.setValue(0.0);
        txtTamano.setValue(0.0);
        cmbTipoOpe.setModel(new ListModelList<String>(tiposOperacion));
        cmbTipoInm.setModel(new ListModelList<String>(tiposInmueble));
        System.out.println("10");
		txtNroHab.setValue(0);
		txtNroEst.setValue(0);
        txtFoto.setText(" ");
        System.out.println("11");
        txtDireccion.setText(" ");
	    txtcodpago.setText("");
	    txtdescripcion.setText("");
        txtfechapago.setText("");
        txtmonto.setText("");
        System.out.println("12");
      //  cmbEstado.setModel(new ListModelList<Estado>(todosEstados));
       // cmbMunicipio.setText(" ");
        //cmbZona.setText(" ");
        fotos = new ArrayList<Foto>();
        listboxFotos.setModel(new ListModelList<Foto>(fotos));
     }
	
	
 }

